<html>
<head><meta charset="utf-8"><title>documenting the recursive solver · wg-traits · Zulip Chat Archive</title></head>
<h2>Stream: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/index.html">wg-traits</a></h2>
<h3>Topic: <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html">documenting the recursive solver</a></h3>

<hr>

<base href="https://rust-lang.zulipchat.com">

<head><link href="https://rust-lang.github.io/zulip_archive/style.css" rel="stylesheet"></head>

<a name="199407105"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199407105" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199407105">(Jun 01 2020 at 18:45)</a>:</h4>
<p>So I've been working on documenting the recursive solver in this branch (I've got a lot of edits locally, too, which I'll push soon):</p>
<p><a href="https://github.com/nikomatsakis/chalk-ndm/tree/recursive-solver-document">https://github.com/nikomatsakis/chalk-ndm/tree/recursive-solver-document</a></p>
<p>but I have to admit I'm finding it hard to figure out the right way to explain it. Not sure if this approach is working.</p>



<a name="199543972"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199543972" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199543972">(Jun 02 2020 at 19:52)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> albeit work in progress, it is quite enlightening</p>



<a name="199568864"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199568864" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199568864">(Jun 03 2020 at 00:26)</a>:</h4>
<p>So, radical idea. What if <code>chalk_engine</code> and <code>chalk_recursive</code> (or whatever name) were their own crates that depended on <code>chalk_solve</code></p>



<a name="199568962"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199568962" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199568962">(Jun 03 2020 at 00:28)</a>:</h4>
<p>So, we lose the ability to have a single <code>Solver</code> struct that you pick the implementation</p>



<a name="199568964"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199568964" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199568964">(Jun 03 2020 at 00:28)</a>:</h4>
<p>but there's already some indirection there</p>



<a name="199569099"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199569099" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199569099">(Jun 03 2020 at 00:31)</a>:</h4>
<p>but really, somewhat like <code>chalk-ir</code> and <code>chalk-engine</code> there's no real reason for the dependency direction as-is</p>



<a name="199569592"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199569592" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199569592">(Jun 03 2020 at 00:40)</a>:</h4>
<p>And to build on that, we eventually want to settle on one or the other <em>anyways</em></p>



<a name="199598090"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199598090" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199598090">(Jun 03 2020 at 09:34)</a>:</h4>
<p>Huh, that's interesting. It feels wrong to me in that -- in principle -- the solvers/engines ought to be independent of those details and "reusable", but I see your point that the code would be simpler this way, and it's not like we actually <em>plan</em> to re-use them.</p>



<a name="199598109"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199598109" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199598109">(Jun 03 2020 at 09:34)</a>:</h4>
<p>And given that they depend on chalk-ir already...</p>



<a name="199598189"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199598189" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199598189">(Jun 03 2020 at 09:35)</a>:</h4>
<p>I don't know that a single <code>Solver</code> struct is important except for testing, but we can recreate the struct at the testing layer</p>



<a name="199620395"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199620395" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199620395">(Jun 03 2020 at 13:40)</a>:</h4>
<p>Should I try to do this refactor ?</p>



<a name="199623306"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199623306" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199623306">(Jun 03 2020 at 14:04)</a>:</h4>
<p>nvm I see <span class="user-mention" data-user-id="232957">@Jack Huey</span> is already doing that</p>



<a name="199686907"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199686907" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199686907">(Jun 03 2020 at 22:51)</a>:</h4>
<p><a href="https://github.com/rust-lang/chalk/pull/488">https://github.com/rust-lang/chalk/pull/488</a> &lt;-- docs, I think i'm done for now :P</p>



<a name="199686944"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199686944" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199686944">(Jun 03 2020 at 22:51)</a>:</h4>
<p>I think <span class="user-mention" data-user-id="283967">@Zahari Dichev</span> that refactor might be nice, I also plan to start suggesting some steps about how to prepare for the salsa integration, and maybe to spell out what coinduction might mean</p>



<a name="199686947"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199686947" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199686947">(Jun 03 2020 at 22:51)</a>:</h4>
<p>but I have to go now :)</p>



<a name="199727749"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199727749" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199727749">(Jun 04 2020 at 10:25)</a>:</h4>
<p>I went ahead and just merged that so you can read it here <a href="http://rust-lang.github.io/chalk/book/recursive.html">http://rust-lang.github.io/chalk/book/recursive.html</a></p>



<a name="199736195"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736195" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736195">(Jun 04 2020 at 12:02)</a>:</h4>
<p>I realize it doesn't include priorities, we should add that</p>



<a name="199736296"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736296" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736296">(Jun 04 2020 at 12:03)</a>:</h4>
<p>I'm a bit confused about the example in <a href="http://rust-lang.github.io/chalk/book/recursive.html#recursion-and-completeness">http://rust-lang.github.io/chalk/book/recursive.html#recursion-and-completeness</a>, shouldn't that work in the recursive solver because we can solve <code>Implemented(?X: B)</code> uniquely and then the rest follows? haven't tried it yet</p>



<a name="199736338"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736338" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736338">(Jun 04 2020 at 12:03)</a>:</h4>
<p>it might be missing a second impl like</p>



<a name="199736390"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736390" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736390">(Jun 04 2020 at 12:04)</a>:</h4>
<div class="codehilite"><pre><span></span><code><span class="k">impl</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="kt">u64</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">}</span><span class="w"></span>
</code></pre></div>



<a name="199736482"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736482" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736482">(Jun 04 2020 at 12:04)</a>:</h4>
<p>or if the traits are non-enumerable, but that doesn't seem like the point of the example</p>



<a name="199736836"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736836" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736836">(Jun 04 2020 at 12:08)</a>:</h4>
<p>ah yeah that's true</p>



<a name="199736846"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199736846" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199736846">(Jun 04 2020 at 12:08)</a>:</h4>
<p>adding a second impl should fix it indeed</p>



<a name="199737083"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737083" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737083">(Jun 04 2020 at 12:10)</a>:</h4>
<p>usually my example is one trait for all signed integers (i8, i16, i32, etc) and one trait for all 32 bit things</p>



<a name="199737091"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737091" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737091">(Jun 04 2020 at 12:11)</a>:</h4>
<p>which have a unique intersection</p>



<a name="199737097"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737097" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737097">(Jun 04 2020 at 12:11)</a>:</h4>
<p>but are ambiguous</p>



<a name="199737138"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737138" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737138">(Jun 04 2020 at 12:11)</a>:</h4>
<p>anyway that suggests another missing chapter, one that explains the "<a href="http://Fulfill.rs">Fulfill.rs</a>" file, and the way that it tries to find <em>some</em> goal it can solve (and hence reorders as it goes)</p>



<a name="199737241"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737241" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737241">(Jun 04 2020 at 12:12)</a>:</h4>
<p>plus it would be good to talk about non-enumerable</p>



<a name="199737261"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737261" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737261">(Jun 04 2020 at 12:12)</a>:</h4>
<p>i.e., you can retool the example to be relevant even so, but the point is that since traits in rustc are non-enumerable, it's sort of a moot point anyway</p>



<a name="199737532"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737532" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737532">(Jun 04 2020 at 12:15)</a>:</h4>
<p>it's easy to adjust to be relevant for non-enumerable traits as well, though, right? just use <code>impl B for Foo&lt;u32&gt;</code>, <code>impl B for Foo&lt;u64&gt;</code> and so on</p>



<a name="199737608"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737608" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737608">(Jun 04 2020 at 12:16)</a>:</h4>
<p>right</p>



<a name="199737627"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199737627" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199737627">(Jun 04 2020 at 12:16)</a>:</h4>
<p>maybe even worth doing so...</p>



<a name="199883942"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199883942" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199883942">(Jun 05 2020 at 14:26)</a>:</h4>
<p>So <span class="user-mention" data-user-id="232957">@Jack Huey</span> after <a href="https://github.com/rust-lang/chalk/pull/487">https://github.com/rust-lang/chalk/pull/487</a> gets merged, can I pick the work for splitting the recursive solver into a separate crate that depends on chalk_solve ?</p>



<a name="199883977"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199883977" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199883977">(Jun 05 2020 at 14:26)</a>:</h4>
<p>or you maybe intend to do it right there ?</p>



<a name="199923871"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199923871" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199923871">(Jun 05 2020 at 19:34)</a>:</h4>
<p>So <span class="user-mention" data-user-id="232957">@Jack Huey</span> I'm inclined to merge <a href="https://github.com/rust-lang-nursery/chalk/issues/487">chalk#487</a> even if it still seems like things are "evolving"</p>



<a name="199923876"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199923876" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199923876">(Jun 05 2020 at 19:34)</a>:</h4>
<p>any objections to that?</p>



<a name="199924636"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199924636" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199924636">(Jun 05 2020 at 19:41)</a>:</h4>
<p>I think that's good with me. Wasn't sure if we wanted a review from <span class="user-mention" data-user-id="129457">@Florian Diebold</span>. But there aren't any semantic changes, so it doesn't matter too much :)</p>



<a name="199927014"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199927014" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199927014">(Jun 05 2020 at 20:01)</a>:</h4>
<p>so is there still an inclination to split  the recursive solver and make both it and chalk_engine depend on chalk_solve ?</p>



<a name="199928593"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199928593" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199928593">(Jun 05 2020 at 20:15)</a>:</h4>
<p>possibly :)</p>



<a name="199992141"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/199992141" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#199992141">(Jun 06 2020 at 20:38)</a>:</h4>
<p><span class="user-mention" data-user-id="283967">@Zahari Dichev</span> I didn't actually answer your question: yes, feel free to try to split out the recursive solver (and maybe switch up the chalk-engine dependency order)</p>



<a name="200481786"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200481786" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200481786">(Jun 10 2020 at 21:51)</a>:</h4>
<p><span class="user-mention" data-user-id="283967">@Zahari Dichev</span> are you currently hacking on recursive solve? (or you, <span class="user-mention" data-user-id="129457">@Florian Diebold</span>?)</p>



<a name="200482480"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200482480" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Florian Diebold <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200482480">(Jun 10 2020 at 21:56)</a>:</h4>
<p>I'm not</p>



<a name="200482709"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200482709" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200482709">(Jun 10 2020 at 21:58)</a>:</h4>
<p>OK, I'm going to spend a bit of time playing with it, I'm just looking into the caching stuff I've been thinking about</p>



<a name="200482864"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200482864" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200482864">(Jun 10 2020 at 22:00)</a>:</h4>
<p>/me needs to write <em>some</em> code this week</p>



<a name="200485359"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200485359" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200485359">(Jun 10 2020 at 22:23)</a>:</h4>
<p><span class="user-mention" data-user-id="232957">@Jack Huey</span> what was the motivation for the <code>RecursiveInferenceTable</code> and <code>RecursiveSolver</code> traits in <code>recursive::fulfill</code> (versus having it know the precise types)</p>



<a name="200486205"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200486205" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200486205">(Jun 10 2020 at 22:31)</a>:</h4>
<p>I guess it doesn't matter actually</p>



<a name="200486211"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200486211" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200486211">(Jun 10 2020 at 22:31)</a>:</h4>
<p>anyway, opened <a href="https://github.com/rust-lang/chalk/pull/513">https://github.com/rust-lang/chalk/pull/513</a> with some minor refactorings for now</p>



<a name="200493917"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200493917" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200493917">(Jun 11 2020 at 00:08)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> those were there to help to be able to move them into a separate crate</p>



<a name="200493953"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200493953" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Jack Huey <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200493953">(Jun 11 2020 at 00:09)</a>:</h4>
<p>Though, if we do decide to just make chalk-engine and the recursive solver depend on chalk-solve instead of the other way around, it's kind of a moot point</p>



<a name="200528569"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200528569" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200528569">(Jun 11 2020 at 10:51)</a>:</h4>
<p><span class="user-mention" data-user-id="116009">@nikomatsakis</span> working <a href="https://github.com/rust-lang/chalk/issues/510">https://github.com/rust-lang/chalk/issues/510</a>. Was planning to use some of your wisdom that you shared in the docs and here to tackle coinduction correctly but since you need to write some code this week maybe that will be way more effective (and quick)way of going about it.</p>



<a name="200550013"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200550013" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> nikomatsakis <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200550013">(Jun 11 2020 at 14:16)</a>:</h4>
<p>well <span class="user-mention" data-user-id="283967">@Zahari Dichev</span> I wasn't planning on working on that aspect, though I might well touch some of the same code. But it's usually better to work with others and help grow expertise, so I'd love to work with you on it</p>



<a name="200550452"></a>
<h4><a href="https://rust-lang.zulipchat.com#narrow/stream/144729-wg-traits/topic/documenting%20the%20recursive%20solver/near/200550452" class="zl"><img src="https://rust-lang.github.io/zulip_archive/assets/img/zulip.svg" alt="view this post on Zulip" style="width:20px;height:20px;"></a> Zahari Dichev <a href="https://rust-lang.github.io/zulip_archive/stream/144729-wg-traits/topic/documenting.20the.20recursive.20solver.html#200550452">(Jun 11 2020 at 14:19)</a>:</h4>
<p>Great, which part you think is the best  place for me to start off</p>



<hr><p>Last updated: Aug 07 2021 at 22:04 UTC</p>
</html>